ScriptからRenderPipelineの切り替え

December 25, 2022


URPでテストシーンを作る際にシーンごとにRenderPipelineが切り替わるようにしたかった

設定の確認

そもそもRenderPipelineSettingsの設定箇所は Graphics → Scriptable Render Pipeline Settings AC265F0FB807F83169BB483EFC5D851F こちらがデフォルトで利用する設定。

次にクオリティ設定により自動で切り替わる場所は Quality → Render Pipeline Asset B4CDAE5BABEAE10877381B530B88776A にあります。

QualityLevelにRenderPipelineAssetが設定されている場合はそちらが優先されるため

  1. QualityLevelが設定されている場合はQuality設定の方を変更
  2. Graphicsの設定を変更

の優先度で変更してあげると良さそうです

自動設定

特定のMonobehaviour、テストシーン起動時に自動設定されるようにするには以下のコードだけで良さそうです SerializeFieldにPipelineAssetの参照をつける

差し替わったのをもとに戻さないと挿しっぱなしになるためDisable出戻します

[ExecuteAlways]
public class RenderPipelineSetter : MonoBehaviour
{
	/* Define & Class */


	/* Public Field */


	/* Private Field */

	[SerializeField] private UniversalRenderPipelineAsset _pipelineAsset;

	private RenderPipelineAsset _prevPipelineAsset;
	private bool _isQualitySettings;


	/* Property */


	/* Public Method */


	/* Private Method */


	/* Monobehaviour */


	void OnEnable()
	{
		Apply();
	}

	void OnDisable()
	{
		Reset();
	}

	private void Apply()
	{
		if (_pipelineAsset == null) return;

		if (QualitySettings.renderPipeline != _pipelineAsset)
		{
			_isQualitySettings = true;

			_prevPipelineAsset = QualitySettings.renderPipeline;
			QualitySettings.renderPipeline = _pipelineAsset;
		}
		else if (GraphicsSettings.renderPipelineAsset != _pipelineAsset)
		{
			_isQualitySettings = false;

			_prevPipelineAsset = GraphicsSettings.renderPipelineAsset;
			GraphicsSettings.renderPipelineAsset = _pipelineAsset;
		}
	}

	private void Reset()
	{
		if (_prevPipelineAsset == null) return;

		if (_isQualitySettings)
		{
			QualitySettings.renderPipeline = _prevPipelineAsset;
		}
		else
		{
			GraphicsSettings.renderPipelineAsset = _prevPipelineAsset;
		}
	}
}

参考

https://docs.unity3d.com/ja/2021.2/Manual/srp-setting-render-pipeline-asset.html